//846.一手顺子
//https://leetcode.cn/problems/hand-of-straights/
class Solution {
public:
    bool isNStraightHand(vector<int>& hand, int groupSize) {
        int n = hand.size();
        //无法让每一组都有groupSize个
        if(n % groupSize != 0) return false;

        sort(hand.begin(),hand.end());
        unordered_map<int,int> hash;
        for(int& x:hand) ++hash[x];
        for(int& x:hand)
        {
            //这个数已经被分配完了
            if(hash.count(x) == 0) continue;
            //开始分配 从x到x+groupSize-1 这样就能分配一组顺子了 只需要查看在不在hash中
            for(int k = 0;k<groupSize;++k)
            {
                //如果当前数字找不到下一个 那么就无法与任何数字组成顺子
                if(hash.count(x+k) == 0) return false;
                --hash[x+k];
                if(hash[x+k] == 0) hash.erase(x+k);
            }
        }

        return true;
    }
};